<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>http://javascript.ruanyifeng.com/stdlib/array.html</title>
</head>
<body>
</body>
</html>
<script type="text/javascript">
    var arr = new Array(2);
    console.log(arr.length); // 2
    console.log(arr); // [ undefined x 2 ]

    var arr2 = [1, 2, 3, 4, 5, 6, 7];
    console.log(arr2.length);
    console.log(arr2);

    console.log(Array.isArray(arr2));
    console.log(arr2.valueOf());
    console.log(arr2.toString());

    var arr3 = [];
    //    push方法用于在数组的末端添加一个或多个元素，并返回添加新元素后的数组长度。注意，该方法会改变原数组。
    arr3.push(1, 2, 3);
    console.log(arr3);
    arr3.push([4, 5, 6]);
    console.log(arr3);
    arr3.push(7);
    console.log(arr3);

    //🦅 todo 怎么没溢出
    arr3.push(arr3);
    console.log(arr3);
    arr3.push('abc');
    console.log(arr3);
    arr3.push({p: 'fuck'});
    console.log(arr3);

    //    pop方法用于删除数组的最后一个元素，并返回该元素。注意，该方法会改变原数组。
    arr3.pop();
    console.log(arr3);
    arr3.pop();
    console.log(arr3);

    //    join方法以参数作为分隔符，将所有数组成员组成一个字符串返回。如果不提供参数，默认用逗号分隔。
    var str = arr3.join();
    console.log(str);
    var str2 = arr3.join("---");
    console.log(str2);
    console.log(Array.prototype.join.call('hello', '-'));

    //    concat方法用于多个数组的合并。它将新数组的成员，添加到原数组的尾部，然后返回一个新数组，原数组不变。
    //置空数组
    arr3.length = 0;
    console.log(arr3);
    arr3 = [1, 2, 3];
    var arr4 = [1, 2, 3];
    console.log(arr3);
    var arr5 = arr3.concat(arr4);
    console.log(arr5);
    console.log("abc".concat("def"));

    //    shift方法用于删除数组的第一个元素，并返回该元素。注意，该方法会改变原数组。
    arr5.shift();
    console.log(arr5);

    //    shift方法可以遍历并清空一个数组。
    var item;
    while (item = arr5.shift()) {
        console.log(item);
    }
    console.log(arr5);

    //    unshift方法用于在数组的第一个位置添加元素，并返回添加新元素后的数组长度。注意，该方法会改变原数组。
    arr5.unshift(1, 2, 3);
    console.log(arr5);
    arr5.unshift(11, 22);
    console.log(arr5);

    //    reverse方法用于颠倒数组中元素的顺序，返回改变后的数组。注意，该方法将改变原数组。
    arr5.reverse();
    console.log(arr5);
    //    slice方法用于提取原数组的一部分，返回一个新数组，原数组不变。
    //    它的第一个参数为起始位置（从0开始），第二个参数为终止位置（但该位置的元素本身不包括在内）。
    //    如果省略第二个参数，则一直返回到原数组的最后一个成员。
    console.log(arr5.slice(3, 5));


</script>
